home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 2 / LSD and 17bit Compendium Deluxe - Volume II.iso / a / prog / asmsrc / phagexsources.lha / source / InterCircles.s < prev    next >
Text File  |  1994-07-09  |  6KB  |  443 lines

  1. ; Interference Circles, Just both playfields offsetted using plane Pointers
  2. ; and hardware offset, the clever bit is only HALF of a circle is used, the
  3. ; Bottom half is the top half reversed using a Negative Modulo
  4.  
  5.     Opt    c-
  6.     Section    "Base Code",Code_c
  7.  
  8. Start    Movem.l    d0-d7/a0-a6,-(sp) 
  9.     Bsr    KillSys      
  10.     
  11.     Lea    CopperList(pc),a0 
  12.     Lea    HardWare,a6      
  13.     Move.l    a0,Cop1Lc(a6)      
  14.     Move.w    #$83c0,DMACon(a6)
  15.     
  16. Loop    Bsr    VBL    
  17.     Bsr    DoXYSine
  18.     Bsr    SetCircle
  19.     Btst    #6,$Bfe001      
  20.     Bne    Loop      
  21.         
  22.     Bsr    ReturnSys      
  23.     Movem.l    (sp)+,d0-d7/a0-a6 
  24.     Moveq    #0,d0      
  25.     Rts
  26.  
  27. SetCircle    Lea    CopperBPLS(pc),a0
  28.     Lea    CopperPos(pc),a1
  29.     Lea    CircleGFX(pc),a2
  30.     Lea    CircleXYPos(pc),a3
  31.     Lea    CopperModA(pc),a5
  32.     Move.w    #0,2(a1)
  33.     Bsr    DoCircle
  34.     Or.w    d1,2(a1)
  35.     Lea    CopperModB(pc),a5
  36.     Lea    CopperBPLS1(pc),a0
  37.     Lea    CopperPos(pc),a1
  38.     Lea    CircleGFX(pc),a2
  39.     Lea    CircleXYPosa(pc),a3
  40.     Bsr    DoCircle
  41.     Asl.w    #4,d1
  42.     Or.w    d1,2(a1)
  43.     Bsr    SetPriority
  44.     Rts
  45.     
  46. DoCircle    Moveq    #0,d0
  47.     Moveq    #0,d2
  48.     Moveq    #0,d3
  49.     Moveq    #0,d4
  50.     
  51.     Move.w    2(a3),d4
  52.     Move.w    #271-16,d0
  53.     Sub.w    d4,d0
  54.     
  55.     Bsr    SetWait
  56.     Move.w    2(a3),d0
  57.     Add.w    #32,d0
  58.     Move.l    #64,d1
  59.     Muls    d0,d1
  60.     Add.l    d1,a2
  61.     
  62.     Move.w    0(a3),d0
  63.     Add.w    #5,d0
  64.     Asr.w    #3,d0
  65.     Bclr    #0,d0
  66.     Add.l    d0,a2
  67.     Move.w    0(a3),d0
  68.     Add.w    #5,d0
  69.     And.w    #15,d0
  70.     Move.w    #15,d1
  71.     Sub.w    d0,d1
  72.     Move.w    d1,d0
  73.     And.w    #15,d0
  74.     Move.w    d0,d1    
  75.     Move.l    a2,d0
  76.     Move.w    d0,6(a0)
  77.     Swap    d0
  78.     Move.w    d0,2(a0)
  79.     Rts
  80.  
  81. SetWait    Cmpi.w    #$100,d0
  82.     Bls    NoPalCopper
  83.     Move.l    #$ffe1fffe,(a5)
  84.     Sub.w    #$100,d0
  85.     Move.b    d0,4(a5)
  86.     Rts
  87. NoPalCopper    Move.l    #$01fc0000,(a5)
  88.     Move.b    d0,4(a5)    
  89.     Rts
  90.     
  91. SetPriority    Lea    CopperModA(pc),a0
  92.     Move.w    CircleXYPos+2(pc),d0
  93.     Move.w    CircleXYPosa+2(pc),d1
  94.     
  95.     Cmp.w    d0,d1
  96.     Ble    NoChange
  97.     
  98.     Move.l    00(a0),d0
  99.     Move.l    04(a0),d1
  100.     Move.l    12(a0),00(a0)
  101.     Move.l    16(a0),04(a0)
  102.     Move.l    d0,12(a0)
  103.     Move.l    d1,16(a0)
  104.     Move.l    #$010aff92,08(a0)
  105.     Move.l    #$0108ff92,20(a0)
  106.     Rts
  107. NoChange    Move.l    #$0108ff92,08(a0)
  108.     Move.l    #$010aff92,20(a0)
  109.     Rts
  110.     
  111. DoXYSine    Lea    CircleXYPos(pc),a4
  112.     Lea    SineXPt(pc),a5
  113.     Bsr    DoSine
  114.     Move.w    d3,(a4)
  115.     Lea    CircleXYPos+2(pc),a4
  116.     Lea    SineYPt(pc),a5
  117.     Bsr    DoSine
  118.     Move.w    d3,(a4)
  119.     Lea    CircleXYPos(pc),a4
  120.     And.w    #511,0(a4)
  121.     And.w    #511,2(a4)
  122.     Lea    CircleXYPosa(pc),a4
  123.     Lea    SineXPta(pc),a5
  124.     Bsr    DoSine
  125.     Move.w    d3,(a4)
  126.     Lea    CircleXYPosa+2(pc),a4
  127.     Lea    SineYPta(pc),a5
  128.     Bsr    DoSine
  129.     Move.w    d3,(a4)
  130.     Lea    CircleXYPosa(pc),a4
  131.     And.w    #511,0(a4)
  132.     And.w    #511,2(a4)
  133.     Rts
  134.  
  135. DoSine    Lea    SineData(pc),a6
  136.     Moveq    #0,d2
  137.     Moveq    #0,d3
  138.     Move.l    08(a5),d0
  139.     Move.l    12(a5),d1
  140.     Add.l    d0,00(a5)
  141.     Add.l    d1,04(a5)
  142.     And.l    #$ffe,00(a5)    
  143.     And.l    #$ffe,04(a5)    
  144.     Move.l    00(a5),d0
  145.     Move.l    04(a5),d1    
  146.     Move.w    (a6,d0.l),d2
  147.     Move.w    (a6,d1.l),d3    
  148.     Add.l    d2,d3    
  149.     Asr.w    #3,d3
  150.     Add.w    #2416,d3
  151.     
  152.     Muls    #1000,d3
  153.     Divs    #1500,d3
  154.     Rts        
  155.  
  156. KillSys    Bsr.s    SysWait    
  157.  
  158.     Move.l    $4,a6    
  159.     Lea    GFXName(pc),a1    
  160.     Moveq    #0,d0    
  161.     Jsr    -552(a6)    
  162.         
  163.     Lea    OldCop1(pc),a5
  164.     Move.l    $26(a0),$0(a5)    
  165.     Move.l    $32(a0),$4(a5)    
  166.     
  167.     Lea    HardWare,a6
  168.     Move.w    IntEnaR(a6),d0    
  169.     Move.w    DMAConR(a6),d1  
  170.     Or.w    #$8000,d0    
  171.     And.w    #$03ff,d1    
  172.     Or.w    #$8000,d1    
  173.     Move.w    d0,$8(a5)    
  174.     Move.w    d1,$a(a5)    
  175.     
  176.     Move.w    #$7fff,IntEna(a6) 
  177.     Move.w    #$7fff,DMACon(a6) 
  178.     Rts
  179.  
  180. SysWait    Move.w    #15,d7    
  181. SysWaitLoop    Move.l    #$05000,d1    
  182.     Bsr.s    WaitVBL    
  183.     Bsr.s    VBL    
  184.     Dbf    d7,SysWaitLoop    
  185.     Rts
  186.  
  187. VBL    Move.l    #$13000,d1    
  188. WaitVBL    Movem.l    d0-d1/a6,-(sp)    
  189.     Lea    HardWare,a6    
  190. WaitVBLLoop    Move.l    VPosR(a6),d0    
  191.     And.l    #$1ff00,d0    
  192.     Cmp.l    d1,d0    
  193.     Bne.s    WaitVBLLoop    
  194.     Movem.l    (sp)+,d0-d1/a6    
  195.     Rts        
  196.  
  197. ReturnSys    Lea    HardWare,a6    
  198.     Move.w    OldIntEna(pc),IntEna(a6)
  199.     Move.w    OldDMACon(pc),DMACon(a6)
  200.     Move.l    OldCop1(pc),Cop1lc(a6)
  201.     Move.l    OldCop2(pc),Cop2lc(a6)
  202.     Rts    
  203.  
  204. GFXName    Dc.b    "graphics.library",0
  205.     Even
  206. OldCop1    Dc.l    0    
  207. OldCop2    Dc.l    0    
  208. OldIntEna    Dc.w    0    
  209. OldDmaCon    Dc.w    0
  210.  
  211. CircleXYPos    Dc.w    0
  212.     Dc.w    0
  213. CircleXYPosa    Dc.w    0
  214.     Dc.w    0
  215.  
  216. SineXPt    Dc.l    $1fe
  217. SineXPt1    Dc.l    0
  218. SineXAdd    Dc.l    -$20
  219. SineXAdd1    Dc.l    -$22
  220.  
  221. SineYPt    Dc.l    0
  222. SineYPt1    Dc.l    0
  223. SineYAdd    Dc.l    $20
  224. SineYAdd1    Dc.l    $20
  225.  
  226. SineXPta    Dc.l    0
  227. SineXPt1a    Dc.l    0
  228. SineXAdda    Dc.l    -$20
  229. SineXAdd1a    Dc.l    -$20
  230.  
  231. SineYPta    Dc.l    $1fe
  232. SineYPt1a    Dc.l    0
  233. SineYAdda    Dc.l    $24
  234. SineYAdd1a    Dc.l    $20
  235.  
  236. Cmv    Macro
  237.     Dc.w    \2,\1
  238.     EndM
  239.     
  240. Cwt    Macro
  241.     Dc.w    (\1*$100)+$01,$fffe
  242.     EndM    
  243.     
  244. CwtBlit    Macro
  245.     Dc.w    $1,0
  246.     EndM    
  247.  
  248. Pal    Macro
  249.     Dc.w    $ffe1,$fffe
  250.     EndM    
  251.  
  252. EndCop    Macro
  253.     Dc.w    $ffff,$fffe
  254.     EndM    
  255.  
  256. CopperList    Cwt    $15    
  257.     Cmv    $0200,BplCon0    
  258. CopperPos    Cmv    $00bb,BplCon1    
  259.     Cmv    $000a,BplCon2    
  260.     Cmv    $1661,DiwStrt    
  261.     Cmv    $36f1,DiwStop
  262.     Cmv    $0028,DdfStrt    
  263.     Cmv    $00d8,DdfStop    
  264.     Cmv    $0012,BplMod1
  265.     Cmv    $0012,BplMod2
  266.     
  267.     Cwt    $1f        
  268.     Cmv    $0000,Color00
  269.     Cmv    $0000,Color01
  270.     Cmv    $0000,Color02
  271.     Cmv    $0fff,Color03
  272.     
  273. CopperBPLS    Cmv    $c,BplPt0h    
  274.     Cmv    $0,BplPt0l    
  275. CopperBPLS1    Cmv    $0,BplPt1h    
  276.     Cmv    $0,BplPt1l    
  277.  
  278.     Cwt    $20
  279.     Cmv    $2200,BplCon0    
  280.     
  281. CopperModA    Cmv    $0,$1fe
  282.     Cwt    $28
  283.     Cmv    $ff92,BplMod1
  284. CopperModB    Cmv    $0,$1fe
  285.     Cwt    $28
  286.     Cmv    $ff92,BplMod2
  287.     
  288.     EndCop
  289.  
  290. SineData    Incbin    Df0:SysData/Sine1024Bs.Dat
  291.     Incbin    Df0:SysData/Sine1024Bs.Dat
  292.  
  293. CircleGFX    Incbin    Df0:Bitmaps/Circle1.Raw
  294.  
  295. ****Custom Chip Registers****
  296.  
  297. Hardware    = $Dff000
  298.  
  299. ;Control Registers
  300.  
  301. Dmaconr    = $002
  302. Vposr    = $004
  303. Vhposr    = $006
  304. Joy0dat    = $00A
  305. Joy1dat    = $00C
  306. Clxdat    = $00E
  307. Intenar    = $01C
  308. Intereqr    = $01E
  309. Copcon    = $02E
  310.  
  311. ;Blitter Registers
  312.  
  313. Bltcon0    = $040
  314. Bltcon1    = $042
  315. Bltafwm    = $044
  316. Bltalwm    = $046
  317. Bltcpth    = $048
  318. Bltcptl    = $04A
  319. Bltbpth    = $04C
  320. Bltbptl    = $04E
  321. Bltapth    = $050
  322. Bltaptl    = $052
  323. Bltdpth    = $054
  324. Bltdptl    = $056
  325. Bltsize    = $058
  326. Bltcmod    = $060
  327. Bltbmod    = $062
  328. Bltamod    = $064
  329. Bltdmod    = $066
  330. Bltcdat    = $070
  331. Bltbdat    = $072
  332. Bltadat    = $074
  333.  
  334. ;Copper Registers
  335.  
  336. Cop1lc    = $080
  337. Cop1lch    = $080
  338. Cop1lcl    = $082
  339. Cop2lc    = $084
  340. Cop2lch    = $084
  341. Cop2lcl    = $086
  342. Copjmp1    = $088
  343. Copjmp2    = $08A
  344. Diwstrt    = $08E
  345. Diwstop    = $090
  346. Ddfstrt    = $092
  347. Ddfstop    = $094
  348. Dmacon    = $096
  349. Clxcon    = $098
  350. Intena    = $09A
  351. Intreq    = $09C
  352.  
  353. ;BitPlane Registers 
  354.  
  355. BplCon0    = $100
  356. BplCon1    = $102
  357. BplCon2    = $104
  358. BplMod1    = $108
  359. BplMod2    = $10a
  360.  
  361. BplPt0h    = $0e0
  362. BplPt0l    = $0e2
  363. BplPt1h    = $0e4
  364. BplPt1l    = $0e6
  365. BplPt2h    = $0e8
  366. BplPt2l    = $0ea
  367. BplPt3h    = $0ec
  368. BplPt3l    = $0ee
  369. BplPt4h    = $0f0
  370. BplPt4l    = $0f2
  371. BplPt5h    = $0f4
  372. BplPt5l    = $0f6
  373.  
  374. ;Colour Registers
  375.  
  376. Color00    = $180
  377. Color01    = $182
  378. Color02    = $184
  379. Color03    = $186
  380. Color04    = $188
  381. Color05    = $18a
  382. Color06    = $18c
  383. Color07    = $18e
  384. Color08    = $190
  385. Color09    = $192
  386. Color10    = $194
  387. Color11    = $196
  388. Color12    = $198
  389. Color13     = $19a
  390. Color14     = $19c
  391. Color15     = $19e
  392. Color16     = $1a0
  393. Color17     = $1a2
  394. Color18     = $1a4
  395. Color19     = $1a6
  396. Color20     = $1a8
  397. Color21     = $1aa
  398. Color22     = $1ac
  399. Color23     = $1ae
  400. Color24     = $1b0
  401. Color25     = $1b2
  402. Color26     = $1b4
  403. Color27     = $1b6
  404. Color28     = $1b8
  405. Color29     = $1ba
  406. Color30     = $1bc
  407. Color31     = $1be
  408.  
  409. EcsNop    = $1fe
  410.  
  411.  
  412.  
  413.  
  414.  
  415.  
  416.  
  417.  
  418.  
  419.  
  420.  
  421.  
  422.  
  423.  
  424.  
  425.  
  426.  
  427.  
  428.  
  429.  
  430.  
  431.  
  432.  
  433.  
  434.  
  435.  
  436.  
  437.  
  438.  
  439.  
  440.  
  441.  
  442.  
  443.